local M = {
    -- "rebelot/kanagawa.nvim",

    -- [[
    -- dependencies = {},
    -- A list of plugin names or plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise. When specifying a name, make sure the plugin spec has been defined somewhere else.

    -- enabled = true,
    -- When false, or if the function returns false, then this plugin will not be included in the spec

    -- cond = true,
    -- Behaves the same as enabled, but won't uninstall the plugin when the condition is false. Useful to disable some plugins in vscode, or firenvim for example.

    -- priority = 99,
    -- Only useful for start plugins (lazy=false) to force loading certain plugins first. Default priority is 50. It's recommended to set this to a high number for colorschemes.
    --
    -- init	fun(LazyPlugin)
    -- init functions are always executed during startup. Mostly useful for setting vim.g.* configuration used by Vim plugins startup
    --
    -- opts	table or fun(LazyPlugin, opts:table)
    -- opts should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the Plugin.config() function. Setting this value will imply Plugin.config()
    --
    -- config	fun(LazyPlugin, opts:table) or true
    -- config is executed when the plugin loads. The default implementation will automatically run require(MAIN).setup(opts) if opts or config = true is set. Lazy uses several heuristics to determine the plugin's MAIN module automatically based on the plugin's name. (opts is the recommended way to configure plugins).
    --
    -- main string?
    -- You can specify the main module to use for config() and opts(), in case it can not be determined automatically. See config()
    --
    -- build	fun(LazyPlugin) or string or false or a list of build commands
    -- build is executed when a plugin is installed or updated. See Building for more information
    --
    -- lazy	boolean?
    -- When true, the plugin will only be loaded when needed. Lazy-loaded plugins are automatically loaded when their Lua modules are required, or when one of the lazy-loading handlers triggers
    --
    -- event	string? or string[] or fun(self:LazyPlugin, event:string[]):string[] or {event:string[]|string, pattern?:string[]|string}
    -- Lazy-load on event. Events can be specified as BufEnter or with a pattern like BufEnter *.Lua
    -- BufRead：当开始读取一个文件到缓冲区时触发。例如，当你使用 :edit 命令打开一个文件时，BufRead 事件就会被触发。
    -- BufReadPost：在文件读取完成并加载到缓冲区后触发。这个事件通常用于在文件内容已经完全加载到缓冲区后执行一些操作，比如对文件内容进行解析或格式化。
    -- BufNewFile：当创建一个新文件时触发。比如使用 :new 命令创建一个新的缓冲区时，就会触发这个事件。
    -- BufWritePre：在将缓冲区内容写入文件之前触发。这个事件常用于在保存文件之前执行一些检查或预处理操作，比如代码格式化或语法检查。
    -- BufWritePost：在将缓冲区内容成功写入文件之后触发。可以用于在保存文件后执行一些后续操作，比如刷新文件状态或通知其他程序。
    -- BufEnter：当进入一个缓冲区时触发。无论是通过切换缓冲区还是打开新的缓冲区，只要焦点进入一个新的缓冲区，就会触发 BufEnter 事件。
    -- BufLeave：当离开一个缓冲区时触发。比如你切换到另一个缓冲区，或者关闭当前缓冲区时，就会触发 BufLeave 事件。
    -- WinEnter：当进入一个窗口时触发。在 Neovim 中，一个缓冲区可以在多个窗口中显示，当你切换到一个新的窗口时，WinEnter 事件就会被触发。
    -- WinLeave：当离开一个窗口时触发。比如你切换到另一个窗口，或者关闭当前窗口时，就会触发 WinLeave 事件。
    -- VimEnter：在 Neovim 启动完成并显示初始屏幕后触发。这个事件常用于在 Neovim 启动后立即执行一些操作，比如加载特定的配置或初始化插件。
    -- InsertEnter：当进入插入模式时触发。比如你按下 i、a 等键进入插入模式时，就会触发 InsertEnter 事件。
    -- InsertLeave：当离开插入模式时触发。比如你按下 <Esc> 键从插入模式回到正常模式时，就会触发 InsertLeave 事件。
    -- CmdlineEnter：当进入命令行模式时触发。比如你按下 : 键进入命令行模式时，就会触发 CmdlineEnter 事件。
    -- CmdlineLeave：当离开命令行模式时触发。比如你执行完一个命令或者按下 <Esc> 键退出命令行模式时，就会触发 CmdlineLeave 事件。

    --
    -- cmd	string? or string[] or fun(self:LazyPlugin, cmd:string[]):string[]
    -- Lazy-load on commands
    --
    -- ft	string? or string[] or fun(self:LazyPlugin, ft:string[]):string[]
    -- Lazy-load on filetype
    --
    -- keys	string? or string[] or LazyKeysSpec[] or fun(self:LazyPlugin, keys:string[]):(string | LazyKeysSpec)[]
    -- Lazy-load on key mapping
    --   keys = {
    --  { "<leader>ft", "<cmd>Neotree toggle<cr>", desc = "NeoTree" },
    -- },
    -- ]]
}

return M
